package pe.gob.osce.sirenas.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import pe.gob.osce.sirenas.dao.EstadoDAOLocal;
import pe.gob.osce.sirenas.dao.convert.EstadoConvert;
import pe.gob.osce.sirenas.model.AcreditacionDTO;
import pe.gob.osce.sirenas.model.EstadoDTO;
import pe.gob.osce.sirenas.model.jpa.Estado;
import pe.gob.osce.sirenas.util.ConstanteEJB;
import pe.gob.osce.sirenas.util.ModeloException;



@Stateless
public class EstadoDAOImpl implements EstadoDAOLocal {

	@PersistenceContext(unitName="pe.gob.osce.sirenas.be.pu" )
	private	EntityManager	em;
	ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteEJB.PROPERTIES);

	@Override 
	public List<EstadoDTO>  listarEstado(Integer indIncidencia,Integer indUpdEstado)	throws Exception {

		List<EstadoDTO> listEstadoDTO=null;
		//FichaArbitral fichaArbitralJPA=null;
		List<Estado> listaEstadoJPA=null;
		try{
			StringBuilder  	jpql= new StringBuilder();
			
			
			jpql.append("SELECT es FROM Estado es WHERE es.estado=1 ");

			if(indIncidencia!=null){
	            jpql.append(" AND es.indIncidencia = :indIncidencia ");				
			}if(indUpdEstado!=null){
	            jpql.append(" AND es.indUpdEstado = :indUpdEstado ");				
			}
			Query	query= em.createQuery( jpql.toString() );
			if(indIncidencia!=null){
				Boolean var=(indIncidencia==1)?true:false;
	            query.setParameter("indIncidencia", var);		
			}if(indUpdEstado!=null){
				Boolean var=(indUpdEstado==1)?true:false;
	            query.setParameter("indUpdEstado",var );					
			}
			
			List<Estado>	listaObjeto= query.getResultList();
			if(!listaObjeto.isEmpty()) {
				listaEstadoJPA=new ArrayList<Estado>();
				for (Estado obj: listaObjeto) {					
					listaEstadoJPA.add(obj);
				}
				listEstadoDTO=EstadoConvert.createListaEstadoDTO(listaEstadoJPA);
			}			
			
		} catch (NoResultException nre) {
			listEstadoDTO=null;
			 throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_DATA));
		}catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB), e);
		}
		return listEstadoDTO;
	}
	
}
